NSMutableArray *viewController = [NSMutableArray arrayWithArray:[navController viewControllers]]; [viewController replaceObjectAtIndex:1 withObject:replacementController]; [navController setViewControllers:viewController];
См. ссылку на класс UINavigationController для получения дополнительной информации.
Идея языкового интегрированного запроса не нова, способ, которым MS выразился, уникален и нов. . На него влияют синтаксис Haskell и SQL, у Haskell была идея счетчиков и ленивых вычислений, которые являются основным принципом подчеркивания при реализации LINQ, на самом деле LINQ - это просто синтаксический сахар.
Я считаю, что связь - отличный мост между рассуждениями о ваши программы и данные в абстрактном и чистом виде.
Я думаю, что LINQ очень интересен.
Помните, что он существенно добавляет мощные возможности функционального программирования в .NET.
Также интересно, что Microsoft не пришлось менять среду выполнения, чтобы сделать LINQ работает, все волшебство происходит из-за новых языковых функций в C # 3, в компиляторе и в библиотеке классов - потому что, по сути, ваши запросы внутренне переводятся на синтаксис лямбда (см. LINQPad для хорошей демонстрации этого)
Я считаю, что один из Причина, по которой MS разработала такую технологию, состоит в том, чтобы упростить распараллеливание программ - SQL может стать менее актуальным из-за LINQ.
Если говорить о запросах к коллекциям в памяти, нет, это не уникальная функция. Возьмем, к примеру, оператор прямого канала в F #. Он позволяет писать операции, очень похожие на стиль запроса linq.
Возьмем, к примеру, следующий код, который извлекает цифры из строки и суммирует их
"foobar42".ToCharArray()
|> Seq.filter System.Char.IsDigit
|> Seq.map (fun x -> x.ToString() )
|> Seq.map System.Int32.Parse
|> Seq.sum
Я думаю, что все это начал с LINQ.NET. В настоящее время существует несколько других реализаций: http://en.wikipedia.org/wiki/Linq#Other_language_implementations , но MS LINQ был первым, если я правильно помню.
В Microsoft очень похожий синтаксис был разработан в C-omega ( Cw) до того, как он был принят в C # и VB.
Концепции в Linq (Where, Select, Aggregate) были в LISP лет , и это совсем не ново. Однако реализация на C # особенно элегантна, особенно как ей удается добавить довольно разрушительную концепцию, но при этом так хорошо сочетается с существующим кодом C # 2.0. «Переинтерпретировать Linq AST как SQL» тоже чертовски умно.
Эта идея «Интегрированных языковых запросов» нова? а если нет, то какие еще языки реализуют подобную функцию
Если вы считаете sql языком, то нет. Я думаю, что понимание MS заключалось в том, что все в массиве, таком как контейнер, по сути, является базой данных в памяти. Не только это, но многие операции над этими коллекциями одинаковы. Программисты должны написать миллионы .selects, .wheres и .first в течение года. Многие из этих реализаций имеют временные массивы и переменные, которые загромождают код. В LINQ логика становится намного более лаконичной, без переменных / массивов temp / holder. MS уничтожила целый класс ошибок с помощью стандартных операторов LINQ.
Чем отличаются другие реализации от Microsoft? Не уверен
Это немного субъективно, но насколько важен LINQ как идея для других?
Я считаю, что LINQ, возможно, самая революционная языковая функция, которую я когда-либо видел, и я думал, что закрытие тоже довольно круто. Это делает программы более чистыми, а программистов - более продуктивными.
Linq имеет прямое отношение к пониманиям списков , которые вы можете найти в функциональных языках и в более распространенных языках, таких как Python, где это стандартная и очень широко используемая функция для довольно давно.
В качестве хорошего примера понимания списков, эта функция Python взята из простой проверки орфографии Питера Норвига
def edits1(word):
s = [(word[:i], word[i:]) for i in range(len(word) + 1)]
deletes = [a + b[1:] for a, b in s if b]
transposes = [a + b[1] + b[0] + b[2:] for a, b in s if len(b)>1]
replaces = [a + c + b[1:] for a, b in s for c in alphabet if b]
inserts = [a + c + b for a, b in s for c in alphabet]
return set(deletes + transposes + replaces + inserts)
. Она очень похожа на Linq с (неявным) выбором написано в начале выражения, а не в конце, как в Linq.
лямбда-выражения несколько осуждаются в Python, а понимание списков по умолчанию в Python нетерпеливо (подумайте List
) вместо ленивого ( IEnumerable
), но это очень близко.
Что касается концепции наличия (в некоторой степени) чистой цепочки функций,как и другие люди здесь ответили, это одна из старейших концепций в компьютерных языках (Лиспу уже за 50 ...)