Анонимный инициализатор набора для словаря

Чистый удар путь:

~$ x="/foo/bar/fizzbuzz.bar.quux.zoom"; 
~$ y=${x/\/*\//}; 
~$ echo ${y/.*/}; 
fizzbuzz

Эта функциональность объяснена на ударе человека при "Расширении Параметра". Не колотят пути, имейтесь в большом количестве: awk, жемчуг, sed и так далее.

РЕДАКТИРОВАНИЕ: Работы с точками в суффиксах файла и не должны знать суффикс (расширение), но работа doesn’t с точками в имя само.

10
задан abatishchev 30 July 2012 в 07:59
поделиться

2 ответа

Как насчет:

var dict = new[] {
            new { Text = "TextA", Url = "UrlA" },
            new { Text = "TextB", Url = "UrlB" }
        }.ToDictionary(x => x.Url);
// or to add separately:
dict.Add("UrlC", new { Text = "TextC", Url = "UrlC" });

Однако вы можете просто foreach в списке / массиве ...

var arr = new[] {
    new { Text = "TextA", Url = "UrlA" },
    new { Text = "TextB", Url = "UrlB" }
};
foreach (var item in arr) {
    Console.WriteLine("{0}: {1}", item.Text, item.Url);
}

Вам нужен словарь, только если вам нужен O (1 ) поиск по (уникальному) ключу.

16
ответ дан 3 December 2019 в 21:21
поделиться

Да, но только с отличным обходным путем и только в рамках метода.

Это можно сделать следующим образом:

    static Dictionary<TKey, TValue> NewDictionary<TKey, TValue>(TKey key, TValue value)
    {
        return new Dictionary<TKey, TValue>();
    }
    public void DictRun()
    {

        var myDict = NewDictionary(new { url="a"},
            new { Text = "dollar", Url ="urlA"});
        myDict.Add(new { url = "b" }, new { Text = "pound", Url = "urlB" });
        myDict.Add(new { url = "c" }, new { Text = "rm", Url = "urlc" });
        foreach (var k in myDict)
        {
            var url= k.Key.url;
            var txt= k.Value.Text;

            Console.WriteLine(url);
            Console.WriteLine(txt);    
        }

    }

Вы можете обратиться к этому SO-вопросу для получения дополнительной информации.

1
ответ дан 3 December 2019 в 21:21
поделиться
Другие вопросы по тегам:

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