如何找出具有相同value_entries的數組的元素。由於代碼是紅寶石,看起來更好的方法。從紅寶石中返回具有相同值的數組的鍵
輸入
"block_device": {
"sda": {
"size": "83886080",
"removable": "0",
"model": "VBOX HARDDISK",
"rev": "1.0",
"state": "running",
"timeout": "30",
"vendor": "ATA",
"rotational": "1"
},
"sdb": {
"size": "16384",
"removable": "0",
"model": "VBOX HARDDISK",
"rev": "1.0",
"state": "running",
"timeout": "30",
"vendor": "ATA",
"rotational": "1"
},
"sdc": {
"size": "16384",
"removable": "0",
"model": "VBOX HARDDISK",
"rev": "1.0",
"state": "running",
"timeout": "30",
"vendor": "ATA",
"rotational": "1"
}
}
示例代碼塊:
devicesForRaid = []
deviceHolder = []
node['block_device'].each do |deviceName,deviceProperty|
deviceHolder.push(deviceName,deviceProperty['size']) #['sda'=>'83886080','sdb'=>'16384','sdc'=>'16384']
end
deviceHolder.each do | deviceName,deviceSize|
# how to get deviceName who all having same size
if(deviceSize_match_found){
devicesForRaid.push(deviceName)
}
end
預期輸出:
devicesForRaid = ['sdb','sdc']
試驗方法:
使用棧, 推第一元件入堆棧,並與陣元的其餘部分相比較。
如果找到匹配項,將該元素推入堆棧。
示例代碼塊完成或更好的代碼高度讚賞。
我覺得'{「83886080」=> [:sda],「16384」=> [:sdb,:sdc]}。to_a.select {| k,v | v.size> 1}'會輸出:[[[「16384」,[:sdb,:sdc]]]',它與預期的輸出略有偏差。你可能想要做這樣的事情:'{「83886080」=> [:sda],「16384」=> [:sdb,:sdc]}選擇{| k,v | v.size> 1} .values。flatten'。 –