2011-03-03 5 views
1

쉼표로 구분 된 문자열을 구문 분석하여 배열로 저장합니다. C에서 나는이 # :이 C#에서 가장 깨끗한 포트는 무엇입니까?

여기
var someArray = someString.Split(
    new char[] { ',' }, 
    StringSplitOptions.RemoveEmptyEntries); 

foreach (var something in someArray) 
{ 
    SomeList.Add(something.Trim().ToLower()); 
} 

내가 레일 .blank를 사용하여 루비 지금까지이 무엇인가?

some_array = some_string.split(',').each { |something| something.strip.downcase } 
some_array.delete_if { |something| something.blank? } 

더 깨끗한 방법이 있습니까?

답변

2

A) 코드를 서면으로 당신이 기대하는 것을하지 못하게하십시오. .each으로 전화를 걸어 문자열에 변형되지 않은 메서드를 호출합니다. 따라서 some_arraysome_string.split(',')과 같습니다.

B) 나는 개인적으로 이런 짓을 했을까은 :

arr = str.split(',').map{ |s| s.blank? ? nil : s.strip.downcase }.compact 

이는 "컴팩트"로 제거 항목, nil을 가질 수있는 배열을 만듭니다. 절대 속도가 본질 인 경우,하지만이 빨라집니다 :

arr = [] 
str.split(',').each do |s| 
    arr << s.strip.downcase unless s.blank? 
end 

편집 : 수정 된 코드는 공백에 대한 시험이 끝날 때까지 .strip.downcase을 연기 할 수 있습니다.

+0

왜 돌연변이가 없는지에 대한 설명에 감사드립니다. 당신의 대답은 제가보고있는 것에 가깝습니다. 거기에 잼을 넣고 나중에 압축하십시오. – blu

+0

답안은 모두 작동합니다. 나는 한 줄로 각 블록을 가진 두 번째 블록을 사용하여 다시 할당하지 않고 끝내었다. 감사. – blu

+0

비어 있습니까? 공백 문자열을 포착해야하므로 스트립을 조건부로 이동할 수 있습니까? – blu

3
some_string.split(',').map(&:strip).map(&:downcase).reject(&:empty?) 

이 세 가지 중간 배열을 만들고, 그 중 세 가지 모두를 통과하지만, 실제로는 심각한 병목 현상입니다 성능 프로파일 링을 통해 증명할 수없는 한 나는 일반적으로 걱정하지 않을 것입니다.

그렇지 않으면

some_string.split(',').inject([]) {|ary, str| 
    ary.tap { unless (str = str.strip.downcase).empty? then ary << str end } 
} 

(!) 참고처럼 뭔가를해야 할 것 : 나는 아마 쓴 거라고 C# 코드보기 다음과 같습니다 :

var someList = new List<string>(
    from s in someString.Split(
     new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries) 
    select s.Trim().ToLower()); 
+0

답변 해 주셔서 감사합니다. 그것을 이식하려고 사전에 최적화하지 않겠다고 동의했다. 그 C#은 추한 것입니다. – blu

+0

골프를 치고 동일한 배열을 두 번 반복하여 저장하려는 경우 : some_string.split (','). reject (& : empty?) map {| e | e.strip.downcase}' –

+0

뭔가가 꺼져 있는데, 그것은 내 코드 일 수 있지만 'first, second, thirD'의 입력은 3 대신 배열에 4 개의 항목을 생성합니다. C# 버전이 반환되지 않았습니다. 누구든지 그것을 확인할 수 있습니까? – blu

관련 문제