match или Dictionary
От: _d_m_  
Дата: 30.03.12 13:01
Оценка:
        def aInt = array.[] [("key1", 1), ("key2", 33), ("key3", 55)];
        def key = "key2";
        match( aInt )
        {
            | (x, y) when x == key => WriteLine(y)
        }


33
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re: match или Dictionary
От: Аноним  
Дата: 30.03.12 13:10
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>
___>        def aInt = array.[] [("key1", 1), ("key2", 33), ("key3", 55)];
___>        def key = "key2";
___>        match( aInt )
___>        {
___>            | (x, y) when x == key => WriteLine(y)
___>        }
___>


___>33

а где цикл?
Re[2]: match или Dictionary
От: _d_m_  
Дата: 30.03.12 13:15
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>а где цикл?


Т.е. без цикла никак?
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re: match или Dictionary
От: catbert  
Дата: 30.03.12 13:18
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>
___>        def aInt = array.[] [("key1", 1), ("key2", 33), ("key3", 55)];
___>        def key = "key2";
___>        match( aInt )
___>        {
___>            | (x, y) when x == key => WriteLine(y)
___>        }
___>


Так нельзя

foreach ( (x, y) when x == key in aInt ) WriteLine(y)
Re[2]: match или Dictionary
От: catbert  
Дата: 30.03.12 13:19
Оценка:
Здравствуйте, catbert, Вы писали:

C>
C>foreach ( (x, y) when x == key in aInt ) WriteLine(y)
C>


Или по-функциональному:

aInt.Where( (x, _) => x == key ).Iter(WriteLine)
Re: match или Dictionary
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.03.12 22:50
Оценка:
Здравствуйте, _d_m_, Вы писали:

def aInt = array[("key1", 1), ("key2", 33), ("key3", 55)];

WriteLine($"..$(aInt.Where((x, _) => x == key))");
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: match или Dictionary
От: _d_m_  
Дата: 31.03.12 14:02
Оценка:
Здравствуйте, catbert, Вы писали:

C>Так нельзя


А почему со списками можно, а с массивами нельзя?
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[2]: match или Dictionary
От: _d_m_  
Дата: 31.03.12 14:22
Оценка:
Здравствуйте, catbert, Вы писали:

C>Так нельзя


"
— Нажмите любую клавишу.
— Эту можно?
— Эту нет.
"

"
— Есть супер патерн матчинг.
— А так можно?
— Так нет.
"

... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[3]: match или Dictionary
От: Аноним  
Дата: 31.03.12 14:39
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Здравствуйте, catbert, Вы писали:


C>>Так нельзя


___>А почему со списками можно, а с массивами нельзя?


со списками тоже нельзя. Нужен цикл все равно.
Re[3]: match или Dictionary
От: catbert  
Дата: 31.03.12 15:26
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>А почему со списками можно, а с массивами нельзя?


Со списками тоже нельзя.
Re[3]: match или Dictionary
От: catbert  
Дата: 31.03.12 15:30
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>"

___>- Есть супер патерн матчинг.
___>- А так можно?
___>- Так нет.
___>"

http://nemerle.org/wiki/index.php?title=Grok_Variants_and_matching
Re[3]: match или Dictionary
От: Аноним  
Дата: 31.03.12 16:32
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Здравствуйте, catbert, Вы писали:


C>>Так нельзя


___>"

___>- Нажмите любую клавишу.
___>- Эту можно?
___>- Эту нет.
___>"

___>"

___>- Есть супер патерн матчинг.
___>- А так можно?
___>- Так нет.
___>"

___>

если бы была унификация было можно.
Re[4]: match или Dictionary
От: _d_m_  
Дата: 01.04.12 10:05
Оценка: :)
Здравствуйте, <Аноним>, Вы писали:

___>>Здравствуйте, catbert, Вы писали:


C>>>Так нельзя


___>>А почему со списками можно, а с массивами нельзя?


А>со списками тоже нельзя. Нужен цикл все равно.

Можно:
        def lst = [("key1", 1), ("key2", 33), ("key3", 55)];
        def key = "key2";
        match( lst )
        {
            | (key, y) => WriteLine(y)
        }

Только не пойму почему в выводе [("key2", 33), ("key3", 55)].
Как получить 33?
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[2]: match или Dictionary
От: _d_m_  
Дата: 01.04.12 10:07
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, _d_m_, Вы писали:


VD>
VD>def aInt = array[("key1", 1), ("key2", 33), ("key3", 55)];

VD>WriteLine($"..$(aInt.Where((x, _) => x == key))");
VD>


Я кончно в Н нуб. Но мне нужно 33.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[5]: match или Dictionary
От: Аноним  
Дата: 01.04.12 11:26
Оценка:
Здравствуйте, _d_m_, Вы писали:

А>>со списками тоже нельзя. Нужен цикл все равно.

___>Можно:
___>
___>        def lst = [("key1", 1), ("key2", 33), ("key3", 55)];
___>        def key = "key2";
___>        match( lst )
___>        {
___>            | (key, y) => WriteLine(y)
___>        }
___>

___>Только не пойму почему в выводе [("key2", 33), ("key3", 55)].
___>Как получить 33?

переменной key присваивается голова списка ("key1", 1), а переменной y хвост [("key2", 33), ("key3", 55)]
тут ты разбираешь список на голову и хвост, а не кортеж списка
func f(lst)
{
 | (key,y)::[] => WriteLine(key);
 | (key,y)::tail => {WriteLine(key);f(tail);}
}
Re[6]: match или Dictionary
От: _d_m_  
Дата: 01.04.12 11:54
Оценка: +1 -1 :)
Здравствуйте, <Аноним>, Вы писали:

А>переменной key присваивается голова списка ("key1", 1), а переменной y хвост [("key2", 33), ("key3", 55)]

А>тут ты разбираешь список на голову и хвост, а не кортеж списка
А>func f(lst)
А>{
А> | (key,y)::[] => WriteLine(key);
А> | (key,y)::tail => {WriteLine(key);f(tail);}
А>}

Ёперный театр. А синтаксис как у кортежа. Ну а как-бы я об этом узнал? Документации 0, в статьях загадочные примеры, по которым типа сразу все должно быть понятно. А в них тупо лупишься и не поймешь откуда взялся х, откуда этот head или этот tail — то ли это ключевые слова, то ли еще че. Статьи эти уже бесят: хопана, а здесь мы ставим волшебную черточку...
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[6]: match или Dictionary
От: _d_m_  
Дата: 01.04.12 12:03
Оценка:
Здравствуйте, <Аноним>, Вы писали:

___>>Можно:

___>>
___>>        def lst = [("key1", 1), ("key2", 33), ("key3", 55)];
___>>        def key = "key2";
___>>        match( lst )
___>>        {
___>>            | (key, y) => WriteLine(y)
___>>        }
___>>

___>>Только не пойму почему в выводе [("key2", 33), ("key3", 55)].
___>>Как получить 33?

А>переменной key присваивается голова списка ("key1", 1), а переменной y хвост [("key2", 33), ("key3", 55)]


И никакого ворнинга, что key и key это два разных человека...
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[7]: match или Dictionary
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 01.04.12 12:15
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>И никакого ворнинга, что key и key это два разных человека...


Никакого предупреждения и не должно быть. Заводить переменные с одинаковыми названиями является обычной практикой. Особенно в Немерле, где можно написать:

def x = "Hello World!";
Console.WriteLine(x.GetType());
def x = 2501;
Console.WriteLine(x.GetType());

System.String
System.Int32

Ce n'est que pour vous dire ce que je vous dis.
Re[8]: match или Dictionary
От: Аноним  
Дата: 01.04.12 12:19
Оценка: +1 -1
Здравствуйте, Don Reba, Вы писали:

DR>Здравствуйте, _d_m_, Вы писали:


___>>И никакого ворнинга, что key и key это два разных человека...


DR>Никакого предупреждения и не должно быть. Заводить переменные с одинаковыми названиями является обычной практикой. Особенно в Немерле, где можно написать:


DR>
DR>def x = "Hello World!";
DR>Console.WriteLine(x.GetType());
DR>def x = 2501;
DR>Console.WriteLine(x.GetType());
DR>

DR>

DR>System.String
DR>System.Int32


Как минимум это не хорошо.
На счет автораскрытие кортежей и еквивалентности синтаксиса кортежей и списков... ПЛОХО
Re[8]: match или Dictionary
От: _d_m_  
Дата: 01.04.12 12:33
Оценка: -1
Здравствуйте, Don Reba, Вы писали:

DR>Здравствуйте, _d_m_, Вы писали:


___>>И никакого ворнинга, что key и key это два разных человека...


DR>Никакого предупреждения и не должно быть. Заводить переменные с одинаковыми названиями является обычной практикой.


А мужики то не знают! (ц)
А в каких языках этот косяк обычная практика?
Или так: если несколько языков обладают недостатком, то это становится нормальным?
            int asd = 666;
            while( false )
            {
                int asd = 555;
            }

ошибка CS0136: Невозможно объявить локальную переменную с именем "asd" в этой области видимости, т.к. она придаст другое значение "asd", которая уже используется в области видимости "родительский или текущий" для обозначения чего-то другого

... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.