В Ruby, как я делаю хеш из массива?

Newtonsoft.JSON является хорошим решением для подобных ситуаций. Кроме того, Newtonsof.JSON работает быстрее других, таких как JavaScriptSerializer, DataContractJsonSerializer.

В этом примере вы можете:

var jsonData = JObject.Parse("your json data here");

Затем вы можете использовать jsonData для JArray, и вы можете использовать для цикла для получения данных на каждой итерации. Кроме того, я хочу что-то добавить.

for (int i = 0; (JArray)jsonData["data"].Count; i++)
{
    var data = jsonData[i - 1];
}

Работа с динамическим объектом и использование сериализации Newtonsoft - хороший выбор.

70
задан Wizzlewott 31 May 2010 в 12:18
поделиться

3 ответа

Скажем, у вас есть функция с забавным именем: "f"

def f(fruit)
   fruit + "!"
end

arr = ["apples", "bananas", "coconuts", "watermelons"]
h = Hash[ *arr.collect { |v| [ v, f(v) ] }.flatten ]

даст вам:

{"watermelons"=>"watermelons!", "bananas"=>"bananas!", "apples"=>"apples!", "coconuts"=>"coconuts!"}

Обновлено:

Как упоминалось в комментариях, Ruby 1.8.7 вводит более приятный синтаксис для этого:

h = Hash[arr.collect { |v| [v, f(v)] }]
120
ответ дан 24 November 2019 в 13:13
поделиться

в дополнение к ответу Vlado Cingel (я еще не могу добавить комментарий, таким образом, я добавил ответ).

Вводят, может также использоваться таким образом: блок должен возвратить аккумулятор. Только присвоение в блоке возвращает значение присвоения, и об ошибке сообщают.

array = ["apples", "bananas", "coconuts", "watermelons"]
hash = array.inject({}) { |h,fruit| h[fruit]= f(fruit); h }
0
ответ дан 24 November 2019 в 13:13
поделиться

Вот что я, наверное, написал бы:

h = Hash[arr.zip(arr.map(&method(:f)))]

Просто, ясно, очевидно, декларативно. Чего еще вам нужно?

11
ответ дан 24 November 2019 в 13:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: