2013-07-17 3 views
0

에 발생의 추가 번호를 (당신은 더 적절한 하나에 제목을 변경하실 수 있습니다!) 배열 조작 : 중복 요소

나는 또 다른 루비/ERB의 질문이 있어요.

irb(main):007:0> open(inFile).each { |ln| puts ln.split(',').map(&:strip)[0..1] } 
ec2-23-22-59-32 
mongoc 
ec2-54-27-11-46 
mongod 
.... 
.... 

는하지만 제가 정말 원하는 것은 에 연접 발생 수 "입니다 mongo- :이 같은 배열을 만들기 위해 파일을 처리 할 수 ​​

ec2-23-22-59-32, mongoc, i-b8b44, instnum=1, Running 
ec2-54-27-11-46, mongod, i-43f9f, instnum=2, Running 
ec2-78-62-192-20, mongod, i-02fa4, instnum=3, Running 
ec2-24-47-51-23, mongos, i-546c4, instnum=4, Running 
ec2-72-95-64-22, mongos, i-5d634, instnum=5, Running 
ec2-27-22-219-75, mongoc, i-02fa6, instnum=6, Running 

그리고 :이 파일이 이되도록 "을 입력

ec2-23-22-59-32 
mongoc1 
ec2-54-27-11-46 
mongod1 
ec2-78-62-192-20 
mongod2 
ec2-24-47-51-23 
mongos1 
ec2-72-95-64-22 
mongos2 
ec2-27-22-219-75 
mongoc2 

몽고 각 타입의 수는 고정되어 있지 않으므로 그 경시 변화. 어떻게 도와 드릴까요? 미리 감사드립니다. 건배!!

+0

"발생 수"는 어떻게 정의합니까? 파일에 있거나 계산 된 것입니까? 인스턴스 번호를 추가하기에 충분합니까? –

+0

@ 마크 : 값을 계산해야합니다. 예를 들어 파일에 mongod에 대한 항목이 세 번 있으면 'mongod1', 'mongod2', 'mongod3'이 있어야하며 같은 규칙이 다른 Mongo 인스턴스에도 적용되어야합니다. MongoC, MongoD 및 MongoS의 수는 VM에서 스핀 업하는 사용자의 결정에 따라 파일에서 달라지며 파일은 요구 사항에 따라 자동으로 생성됩니다. 그것은 당신의 질문에 대답합니까? 건배!! – MacUsers

+0

@Mark : w.r.t. 마지막 질문, "인스턴스 번호"를 "몽고"에 추가하는 것은 내가 정말로 찾고있는 것이 아니지만 그것을하기 위해 괭이를 보는 것을 좋아합니다. 다른 용도로 사용할 수 있습니다. 건배!! – MacUsers

답변

1

빠른 응답 (아마도 최적화 할 수 있습니다) :

data = 'ec2-23-22-59-32, mongoc, i-b8b44, instnum=1, Running 
ec2-54-27-11-46, mongod, i-43f9f, instnum=2, Running 
ec2-78-62-192-20, mongod, i-02fa4, instnum=3, Running 
ec2-24-47-51-23, mongos, i-546c4, instnum=4, Running 
ec2-72-95-64-22, mongos, i-5d634, instnum=5, Running 
ec2-27-22-219-75, mongoc, i-02fa6, instnum=6, Running' 

# a hash where we will save mongo types strings as keys 
# and number of occurence as values 
mtypes = {} 
data.lines.each do |ln| 
    # get first and second element of given string to inst and mtype respectively 
    inst, mtype = ln.split(',').map(&:strip)[0..1] 
    # check if mtypes hash has a key that equ current mtype 
    # if yes -> add 1 to current number of occurence 
    # if not -> create new key and assign 1 as a value to it 
    # this is a if ? true : false -- ternary operator 
    mtypes[mtype] = mtypes.has_key?(mtype) ? mtypes[mtype] + 1 : 1 
    # combine an output string (everything in #{ } is a variables 
    # so #{mtype}#{mtypes[mtype]} means take current value of mtype and 
    # place after it current number of occurence stored into mtypes hash 
    p "#{inst} : #{mtype}#{mtypes[mtype]}" 
end 

출력 :

# "ec2-23-22-59-32 : mongoc1" 
# "ec2-54-27-11-46 : mongod1" 
# "ec2-78-62-192-20 : mongod2" 
# "ec2-24-47-51-23 : mongos1" 
# "ec2-72-95-64-22 : mongos2" 
# "ec2-27-22-219-75 : mongoc2" 

는 아주 아마도 거의 나는 생각한다. 네가 뭔가를 이해하지 못한다면 나에게 알려줘.

+0

고마워, 괜찮 았어. 나는 그것의 대부분을 이해했다고 생각하지만 가치가 계산되는 제 4 행을 설명 할 수 있습니까? 건배!! – MacUsers

+0

몇 가지 덧글 추가 –