Каково некоторое умное использование LINQ?

Я бы использовал numpy для простых операций линейной алгебры (например, умножение небольших матриц).

Если у вас уже есть фрейм данных в нужной форме, вы можете легко преобразовать его в numpy.ndarray.

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_numpy.html#pandas.DataFrame.to_numpy

[114 Если вы не хотите создавать ndarray из нулей, вставьте правильные элементы в нужных местах.

17
задан Even Mien 22 April 2009 в 20:44
поделиться

9 ответов

  • Практически все, что связано с коллекциями, проще с LINQ to Objects. Я нахожу это гораздо более полезным, чем LINQ to SQL.
  • Я довольно полюбил фреймворк, который мы с Марком Гравеллом назвали Push LINQ (в настоящее время является частью MiscUtil , но, вероятно, в конце концов перейдем к MoreLINQ ). Это отлично подходит для вычисления агрегатов для больших потоковых наборов данных, например, огромных файлов журналов
  • LINQ to XML - это самый красивый XML API, который я использовал, и он очень хорошо интегрируется с LINQ to Objects.
  • Parallel LINQ очень хорошая часть инфраструктуры Parallel Extensions - она, безусловно, облегчает распараллеливание задач там, где это уместно (хотя это может пойти ужасно неправильно , если вы не будете осторожны)
19
ответ дан 30 November 2019 в 10:13
поделиться

Robert Shelton of Microsoft was cool enough to list a few LINQ implementations for us:

As of month 7, 2008:

  • LINQ to Amazon
  • LINQ to Active Directory
  • LINQ to Bindable Sources (SyncLINQ)
  • LINQ over C- project
  • LINQ to CRM
  • LINQ To Geo—Language Integrated Query for Geospatial Data
  • LINQ to Excel
  • LINQ to Expressions (MetaLinq)
  • LINQ Extender (Toolkit for building LINQ Providers)
  • LINQ to Flickr
  • LINQ to Google
  • LINQ to Indexes (LINQ and i40)
  • LINQ to IQueryable (Matt Warren on Providers)
  • LINQ to JSON
  • LINQ to NHibernate
  • LINQ to JavaScript
  • LINQ to LDAP
  • LINQ to LLBLGen Pro
  • LINQ to Lucene
  • LINQ to Metaweb(freebase)
  • LINQ to MySQL, Oracle and PostgreSql (DbLinq)
  • LINQ to NCover
  • LINQ to Opf3
  • LINQ to Parallel (PLINQ)
  • LINQ to RDF Files
  • LINQ to Sharepoint
  • LINQ to SimpleDB
  • LINQ to Streams
  • LINQ to WebQueries
  • LINQ to WMI
  • LINQ to XtraGrid
15
ответ дан 30 November 2019 в 10:13
поделиться

Вы также должны проверить Bindable LINQ с сайта CodePlex:

«Bindable LINQ - это набор расширений в LINQ, которые добавляют привязку данных и изменить возможности распространения на стандартные запросы LINQ.

Так же как и пророческое изменение, Bindable LINQ может анализировать ваши запросы во время выполнения и обнаружить любые зависимости Ваш запрос имеет. Если эти зависимости предоставлять события для подписки, Bindable LINQ будет автоматически контролировать их на предмет изменений. «

Вот один из примеров с сайта:

Возьмем этот запрос, например:

   contactsListBox.ItemsSource = from c in customers
                                 where c.Name.StartsWith(textBox1.Text)
                                 select c;

Bindable LINQ обнаружит, что запрос опирается на свойство Text the TextBox object, textBox1. Since the TextBox is a WPF control, Bindable LINQ knows to subscribe to the TextChanged event on the control.

The end result is that as the user types, the items in the query are re-evaluated and the changes appear on screen. No additional code is needed для обработки событий.

5
ответ дан 30 November 2019 в 10:13
поделиться

Bart De Smet's blog has some clever uses of LINQ such as Who ever said LINQ predicates need to be Boolean-valued?.

4
ответ дан 30 November 2019 в 10:13
поделиться

Мне нравится сайт blog.functionalfun.net для этой конкретной цели: практического (и менее практичного, более увлекательного) использования LINQ. В конечном счете, почти все, что он освещает, может быть применено к реальным жизненным ситуациям, но он начал вести блоги, ведя блоги с более «практическими ссылками» на темы, которые он использует в интересном коде бизнес-логики.

4
ответ дан 30 November 2019 в 10:13
поделиться

Я довольно удивлен, что Джон не упомянул своего собственного ...

http://msmvps.com/blogs/jon_skeet/archive/2007/10/03/ linq-to-silliness-generation-a-mandelbrot-with-parallel-потенциал.aspx

Глупо и умно одновременно; -)

Редактировать:

оооо, я забыл о об этом . Трассировка лучей с использованием Linq.

1
ответ дан 30 November 2019 в 10:13
поделиться

В блоге Chalie Calvert есть список хороших провайдеров linq.

Nhibernate to Linq

Я упоминаю об этом, потому что это подвергает множество проблем реализации поставщика Linq для решения сложной проблемы

1
ответ дан 30 November 2019 в 10:13
поделиться

Linq to Excel упрощает получение данных из таблиц Excel. Он заботится о создании соединения OLEDB и оператора sql. Все, что вам нужно сделать, это указать ему путь к файлу в электронной таблице и создать оператор linq.

2
ответ дан 30 November 2019 в 10:13
поделиться

Я использовал LINQ для решения некоторых из проекта EULER в одном C # операторах. (Обратите внимание, что утверждения не такие же, как строки)

Остерегайтесь: злые неприятные хитрости.

//Euler 1
//Add all the natural numbers below one thousand that are multiples of 3 or 5.
Enumerable.Range(0, 1000).Where(i => i % 5 == 0 || i % 3 == 0).Sum()

//Euler 2
//Find the sum of all the even-valued terms in the sequence which do not exceed four million
//Enumerable.Repeat(new List<long>(1024){ 1, 1 }, 1).First(fib => Enumerable.Range(0, int.MaxValue).TakeWhile(i => fib.Last() <= 4000000)
    .Aggregate(true, (u1, u2) => { fib.Add(fib.Last() + fib[fib.Count - 2]); return true; })).Where(n => n % 2 == 0).Sum()

//Euler 3 (>32bit)
//What is the largest prime factor of the number 600851475143?
Enumerable.Range(2, Int32.MaxValue - 2).Where(n => 600851475143 % n == 0 && Enumerable.Range(2, n / 2 - 1).All(f => n % f > 0)).Max()

//Euler 4
//Find the largest palindrome made from the product of two 3-digit numbers.
Enumerable.Range(100, 900).SelectMany(x => Enumerable.Range(100, 900).Select(y => x * y))
                          .Where(n => { var s = n.ToString(); return s.SequenceEqual(s.Reverse()); }).Max()

//Euler 5 (>32bit)
//What is the smallest number divisible by each of the numbers 1 to 20?
Enumerable.Range(20, Int32.MaxValue - 21).Where(n => Enumerable.Range(1, 20).All(i => n % i == 0)).First()

//Euler 6
//Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum.
Math.Pow(Enumerable.Range(1, 100).Sum(), 2) - Enumerable.Range(1, 100).Select(i => i * i).Sum()

//Euler 7
//Find the 10001st prime.
Enumerable.Range(2, Int32.MaxValue - 1).Where(n => Enumerable.Range(2, n / 2 - 1).All(f => n % f > 0)).Skip(10000).First()

//Euler 8
//Discover the largest product of five consecutive digits in the 1000-digit number.
Enumerable.Range(0, 995).Select(i => "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"
    .Substring(i,5).Select(c => c - '0').Aggregate(1, (x, y) => x * y)).Max()


//Euler 10
//Find the sum of all the primes below two million.
Enumerable.Range(2, 2000000).Where(n => Enumerable.Range(2, n / 2 - 1).All(f => n % f > 0)).Select(x => (long)x).Sum()

Enumerable.Range(0, 168).Aggregate(Enumerable.Range(2, 2000000).Select(x => (long)x).ToList(), (result, index) => { result.RemoveAll(i => i > result[index] && i % result[index] == 0); return result; }).Sum()

Enumerable.Repeat(Enumerable.Range(2, 2000000).Select(x => (long)x).ToList(), 1).SelectMany(list => Enumerable.Range(0, Int32.MaxValue).Select(i => new { List = list, Index = i }))
    .TakeWhile((g, i) => g.List[g.Index] * g.List[g.Index] <= 2000000 || i.Dump("Rounds") != i).Aggregate((List<long>) null, (result, g) => { g.List.RemoveAll(i => i > g.List[g.Index] && i % g.List[g.Index] == 0); return g.List; }).Sum()

Enumerable.Repeat(Enumerable.Range(2, 2000000).Select(x => (long)x).ToList(), 1).First(list => Enumerable.Range(0, Int32.MaxValue)
    .TakeWhile(i => list[i] * list[i] <= 2000000 || i.Dump("Rounds")!=i).Aggregate(0, (count, i) => count + list.RemoveAll(j => j > list[i] && j % list[i] == 0)) != null).Sum()

//Euler 14
Enumerable.Range(1, 1000000).Select(s => Enumerable.Repeat(new List<long>(32) { s }, 1).First(list => Enumerable.Range(0, Int32.MaxValue).TakeWhile(i => list.Last() > 1)
    .Aggregate(0, (index, unused) => { list.Add(list.Last() % 2 == 0 ? list.Last() / 2 : 3 * list.Last() + 1); return 1; }) == 1 || true))
    .Aggregate(new List<long>(), (list, result) => list.Count <= result.Count ? result : list)

//Euler 19
//How many Sundays fell on the first of the month during the twentieth century?
Enumerable.Range(1901,100).SelectMany(y => Enumerable.Range(1,12).Select(m => new DateTime(y, m, 1))).Where(d => d.DayOfWeek == DayOfWeek.Sunday)

//Euler 21
//Evaluate the sum of all the amicable numbers under 10000.
Enumerable.Repeat(new Func<int, int>(n => Enumerable.Range(1, n / 2).Where(d => n % d == 0).Sum()), 1)
          .Select(D => Enumerable.Range(1, 10000).Where(a => a == D(D(a)) && a != D(a)).Sum())

//Euler 34
//Find the sum of all numbers which are equal to the sum of the factorial of their digits.
Enumerable.Range(3, 40600).Where(n => n == n.ToString().Select(d => Enumerable.Range(1, d - '0').Aggregate(1, (r, i) => r * i)).Sum()).Sum()

//Euler 40  
Enumerable.Repeat(new StringBuilder(), 1)
    .Where(result => Enumerable.Range(0, Int32.MaxValue)
                               .TakeWhile(i => result.Length <= 1000000)
                               .Aggregate(result, (unused, index) => result.Append(index)) != null)
    .Select(result => Enumerable.Range(1, 6).Select(i => result[(int)Math.Pow(10, i)] - '0')).First().Aggregate(1, (x, y) => x * y)

Другие LINQ одноклассники:

//Primes (Ineffecient)
Enumerable.Range(2, 1000000).Where(n => Enumerable.Range(2, n / 2 - 1).All(f => n % f > 0)).Count()

//Sieve of Eratosthenes
Enumerable.Range(0, 168)
          .Aggregate(Enumerable.Range(2, 1000000).ToList(), (result, index) => { 
               result.RemoveAll(i => i > result[index] && i % result[index] == 0); 
                return result; 
            }).Count
//Prime Factors
Enumerable.Range(2,13195 / 2)
          .Where(n => 13195 % n == 0
                   && Enumerable.Range(2, n / 2 - 1).All(f => n % f > 0))

//Fibonacci
Enumerable.Repeat(new List<long>(32){ 1, 1 }, 1)
    .First(fib => Enumerable.Range(0, 32).Aggregate(true, (u1, u2) => { 
        fib.Add(fib.Last() + fib[fib.Count - 2]); 
        return true; 
    }))
13
ответ дан 30 November 2019 в 10:13
поделиться
Другие вопросы по тегам:

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