zoukankan      html  css  js  c++  java
  • C#笔记(九)

    语言集成查询 (LINQ)

    Example:
    造一副纸牌,然后执行一系列洗牌操作,每次都会输出序列。 还可以将更新后的顺序与原始顺序进行比较。

    // Program.cs
    // The Main() method
    
    static IEnumerable<string> Suits()
    {
        yield return "clubs";
        yield return "diamonds";
        yield return "hearts";
        yield return "spades";
    }
    
    static IEnumerable<string> Ranks()
    {
        yield return "two";
        yield return "three";
        yield return "four";
        yield return "five";
        yield return "six";
        yield return "seven";
        yield return "eight";
        yield return "nine";
        yield return "ten";
        yield return "jack";
        yield return "queen";
        yield return "king";
        yield return "ace";
    }
    // Program.cs
    static void Main(string[] args)
    {
        var startingDeck = from s in Suits()
                           from r in Ranks()
                           select new { Suit = s, Rank = r };
        var startingDeck = Suits().SelectMany(suit => Ranks().Select(rank => new { Suit = suit, Rank = rank }));
    
        // Display each card that we've generated and placed in startingDeck in the console
        foreach (var card in startingDeck)
        {
            Console.WriteLine(card);
        }
    }
    

    部分结果:

    操作顺序

    将一副扑克牌分成两半

    // 52 cards in a deck, so 52 / 2 = 26
    var top = startingDeck.Take(26);
    var bottom = startingDeck.Skip(26);
    

    将扑克牌分为两半后,需要将这两半合并在一起

    IEnumerable 接口有一个方法 (GetEnumerator)。 GetEnumerator 返回的对象包含用于移动到下一个元素的方法,以及用于检索序列中当前元素的属性。 将使用这两个成员来枚举集合并返回元素。 由于此交错方法是迭代器方法,因此将使用 yield return 语法,而不用生成并返回集合。
    使用 yield return 语句可一次返回一个元素。
    可通过使用 foreach 语句或 LINQ 查询来使用从迭代器方法返回的序列。 foreach 循环的每次迭代都会调用迭代器方法。 迭代器方法运行到 yield return 语句时,会返回一个 expression,并保留当前在代码中的位置。 下次调用迭代器函数时,将从该位置重新开始执行。
    可以使用 yield break 语句来终止迭代。

    // 在扩展方法的第一个自变量中添加了 this 修饰符。 也就是说,调用扩展方法,就像是第一个自变量类型的成员方法一样。
    public static IEnumerable<T> InterleaveSequenceWith<T>
        (this IEnumerable<T> first, IEnumerable<T> second)
    {
        var firstIter = first.GetEnumerator();
        var secondIter = second.GetEnumerator();
    
        while (firstIter.MoveNext() && secondIter.MoveNext())
        {
            yield return firstIter.Current;
            yield return secondIter.Current;
        }
    }
    
    var shuffle = top.InterleaveSequenceWith(bottom);
    
  • 相关阅读:
    Atitit 数据库view视图使用推荐规范与最佳实践与方法
    Atitit mybatis快速开发 的sql api接口
    一个数据包经过路由器和交换机各会发生什么变化
    c preprocessor
    A database of opensource HTTP proxies written in python.
    google chrome os下载
    一道笔试题多字串查找
    一个老题:将正整数n分为若干num个不同的正整数之和
    web dev framework
    memory leakage
  • 原文地址:https://www.cnblogs.com/francisforeverhappy/p/Csharp9.html
Copyright © 2011-2022 走看看