2013-12-19 5 views
-1

у меня есть запись, каккарта с тем же ключом и значением пара

firstRecord = [ [ name1:'value1', name2:'value2', name3:'value3'], 
       [ name1:'value1', name2:'value4', name3:'value5' ] ] 

Я вытащил список за то, что значения против имя1 в

valueList = [ 'value1', 'value1' ] 

Я имею другую карту

secondRecord = [ value1:[ key1:'value9', key2:'value10' ] ] 

Я пробовал зацикливать через valueList и secondRecord.subMap([ value1.toString() ])

Я получил карту как

[ value1: [ key1:'value9', key2:'value10' ] ] 

Я хотел карту, как показано ниже (так как есть два одинаковых значения в valueList, я хотел бы иметь два ключа с теми же значениями)

requiredMap = [ value1:[ key1:'value9', key2:'value10'], 
       value1:[ key1:'value9', key2:'value10' ] ] 

, но так как это карта, вторая перезаписывает первую, и мне останется только одна пара ключ/значение.

Возможно ли это с Groovy 1.5.6?

+1

Опять недействительного заводной код ... ;-) –

+0

Invalid заводной код , Зачем вам нужно оба? Вы можете группировать по их счету. – dmahapatro

+0

Да, но это действительно не помогает, и это не очень весело от вечера –

ответ

0

Дано:

firstRecord = [ [ name1:'value1', name2:'value2', name3:'value3'], 
       [ name1:'value1', name2:'value4', name3:'value5' ] ] 

Вы можете получить valueList через:

valueList = firstRecord.name1 

Тогда, учитывая secondRecord:

secondRecord = [ value1:[ key1:'value9', key2:'value10' ] ] 

Вы можете сделать:

result = valueList.inject([:].withDefault { [] }) { m, v -> 
    m[ v ] << secondRecord[ v ] 
    m 
} 

Давать:

assert result == [ value1:[ [ key1:'value9', key2:'value10'], 
          [ key1:'value9', key2:'value10' ] ] ] 

С заводной 1.5.6, что вам нужно сделать:

result = valueList.inject([:]) { m, v -> 
    if(!m[ v ]) { 
     m[ v ] = [] 
    } 
    m[ v ] << secondRecord[ v ] 
    m 
} 
+0

Привет, Тим, это действительно для 1,5,6? это не работает для меня – Techie

+0

Какой бит не работает? Какая у вас ошибка? –

+0

@Techie, независимо от того, я нашел его. Обновленный ответ –

Смежные вопросы