zoukankan      html  css  js  c++  java
  • TypeScript vs. C#: LINQ

    TypeScript vs. C#: LINQ

    TypeScript 没有等效于 LINQ 的语言集成自然查询方面?不能在 TypeScript 中写入以下 LINQ 语句

    1
    var adultUserNames =  from in users  where u.Age >= 18  select u.Name;

    但是,位于 LINQ 核心的 iE6<T>扩展方法在 TypeScript 中具有等效项(或可以模拟)。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Aggregate
    All
    Any
    Append
    Average
    Cast
    Concat
    Contains
    Count
    DefaultIfEmpty
    Distinct
    ElementAt
    ElementAtOrDefault
    Empty
    Except
    First
    FirstOrDefault
    List.ForEach
    GroupBy
    Intersect
    Last
    LastOrDefault
    Max
    Min
    OfType
    OrderBy / ThenBy
    Reverse
    Select
    SelectMany
    Single
    SingleOrDefault
    Skip
    SkipWhile
    Sum
    Take
    TakeWhile
    Union
    Where
    Zip

    Aggregate

    1
    2
    3
    4
    5
    6
    // C#
    var leftToRight = users.Aggregate(initialValue, (a, u) => /* ... */);
      
    // TypeScript
    const leftToRight = users.reduce((a, u) => /* ... */, initialValue);
    const rightToLeft = users.reduceRight((a, u) => /* ... */, initialValue);

    All

    1
    2
    3
    4
    5
    // C#
    var allReady = users.All(u => u.IsReady);
      
    // TypeScrip
    tconst allReady = users.every(u => u.isReady);

    Any

    1
    2
    3
    4
    5
    // C#
    var isDirty = users.Any(u => u.IsDirty);
      
    // TypeScript
    const isDirty = users.some(u => u.isDirty);

    Append

    1
    2
    3
    4
    5
    // C#
    var allUsers = users.Append(oneMoreUser);
      
    // TypeScript
    const allUsers = [ ...users, oneMoreUser ];

    Average

    1
    2
    3
    4
    5
    6
    7
    8
    // C#
    var avgAge = users.Average(u => u.Age);
      
    // TypeScript
    if (users.length < 1) { 
    throw new Error('source contains no elements');
    }
    const avgAge = users.reduce((a, u) => a + u.age, 0) / users.length;

    Cast

    1
    2
    3
    4
    5
    6
    7
    8
    // C#
    var people = users.Cast<Person>();
      
    // TypeScript
    const people = users as Person[];
    // Note: not semantically the same. The C# version throws an exception
    // if any of the users can't be cast to type Person.
    //注意:在语义上不同。C# 版本引发异常如果无法强制转换为键入 Person 的任何用户。 

    Concat

    1
    2
    3
    4
    5
    // C#
    var allUsers = users.Concat(moreUsers);
      
    // TypeScript
    const allUsers = [ ...users, ...moreUsers ];

    Contains

    1
    2
    3
    4
    5
    // C#
    var hasAdmin = users.Contains(admin);
      
    // TypeScript
    const hasAdmin = users.includes(admin); // Use a polyfill for IE support

    Count

    1
    2
    3
    4
    5
    // C#
    var n = users.Count();
      
    // TypeScript
    const n = users.length;

    DefaultIfEmpty

    1
    2
    3
    4
    5
    // C#
    var nonEmptyUsers = Enumerable.DefaultIfEmpty(users);
      
    // TypeScript
    const nonEmptyUsers = users.length ? users : [ null ]; 

    Distinct

    1
    2
    3
    4
    5
    // C#
    var uniqueNames = users.Select(u => u.Name).Distinct();
      
    // TypeScript
    const uniqueNames = Object.keys(users.map(u => u.name).reduce((un, u) => ({ ...un, n }),{}));

    ElementAt

    1
    2
    3
    4
    5
    6
    7
    8
    // C#
    var nth = users.ElementAt(n);
      
    // TypeScript
    if (n < 0 || n > users.length) { 
    throw new Error('Index was out of range');
    }
    const nth = users[n]; 

    ElementAtOrDefault

    1
    2
    3
    4
    5
    // C#
    var nth = users.ElementAtOrDefault(n);
      
    // TypeScript
    const nth = users[n];

    Empty

    1
    2
    3
    4
    5
    6
    7
    8
    // C#
    var noUsers = IEnumerable.Empty<User>();//?.NET 4.0 没找到 找到的是DefaultIfEmpty
    //
    var noUsers = IEnumerable.DefaultIfEmpty<User>();
      
    // TypeScript
    const noUsers: User[] = [];
    const noUsers = [] as User[];

    Except

    1
    2
    3
    4
    5
    6
    7
    8
    // C#
    var maleUsers = users.Except(femaleUsers);
      
    // TypeScript
    const maleUsers = users.filter
    (
    u =>  !femaleUsers.includes(u) // Use a polyfill for IE support(Use a polyfill for IE support)
    ); 

    First

    1
    2
    3
    4
    5
    6
    7
    8
    // C#
    var first = users.First();
      
    // TypeScript
    if (users.length < 1) { 
    throw new Error('Sequence contains no elements');
    }
    const first = users[0];

    FirstOrDefault

    1
    2
    3
    4
    5
    // C#
    var first = users.FirstOrDefault();
      
    // TypeScript
    const first = users[0];

    List.ForEach

    1
    2
    3
    4
    5
    // C#
    users.ToList().ForEach(u => /* ... */);
      
    // TypeScript
    users.forEach(u => /* ... */);

    GroupBy

    1
    2
    3
    4
    5
    6
    7
    8
    9
    // C#
    var usersByCountry = users.GroupBy(u => u.Country);
      
    // TypeScript
    const usersByCountry = users.reduce((ubc, u) =>
    ({ 
    ...ubc, 
    [u.country]: [ ...(ubc[u.country] || []), u ],}),
    {});

    Intersect

    1
    2
    3
    4
    5
    // C#
    var targetUsers = usersWhoClicked.Intersect(usersBetween25And45);
      
    // TypeScript
    const targetUsers = usersWhoClicked.filter(u =>  usersBetween25And45.includes(u) // Use a polyfill for IE support);

    Last

    1
    2
    3
    4
    5
    6
    7
    8
    // C#
    var last = users.Last();
      
    // TypeScrip
    tif (users.length < 1) { 
    throw new Error('Sequence contains no elements');
    }
    const last = users[users.length - 1];

    LastOrDefault

    1
    2
    3
    4
    5
    // C#
    var last = users.LastOrDefault();
      
    // TypeScript
    const last = users[users.length - 1];

    Max

    1
    2
    3
    4
    5
    6
    7
    8
    // C#
    var oldestAge = users.Max(u => u.Age);
      
    // TypeScrip
    tif (users.length < 1) { 
    throw new Error('source contains no elements');
    }
    const oldestAge = users.reduce((oa, u) => Math.max(oa, u.age), 0);

    Min

    1
    2
    3
    4
    5
    6
    7
    8
    // C#
    var youngestAge = users.Min(u => u.Age);
      
    // TypeScript
    if (users.length < 1) {  t
    hrow new Error('source contains no elements');
    }
    const youngestAge = users.reduce((ya, u) => Math.min(ya, u.age), Number.MAX_VALUE);

    OfType

    1
    2
    3
    4
    5
    // C#
    var bots = users.OfType<Bot>();//根据类型刷新元素
      
    // TypeScript
    // No equivalent   无等效项

    OrderBy / ThenBy

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // C#
    var sorted = users.OrderBy(u => u.Age).ThenBy(u => u.Name);
      
    // TypeScript
    const sorted = users.sort((a, b) => { 
    const ageDiff = b.age - a.age; 
    if (ageDiff)
      return ageDiff; 
    return a.name.localeCompare(b.name);
    // Use a polyfill for IE support
    }
    );

    Reverse

    1
    2
    3
    4
    5
    // C#
    var backwards = users.Reverse();
      
    // TypeScript
    const backwards = users.reverse();// Caution: users is also reversed! 原数组也翻转了

    Select

    1
    2
    3
    4
    5
    // C#
    var names = users.Select(u => u.Name);
      
    // TypeScript
    const names = users.map(u => u.name);  

    SelectMany

    1
    2
    3
    4
    5
    // C#
    var phoneNumbers = users.SelectMany(u => u.PhoneNumbers);
      
    // TypeScript
    const phoneNumbers = users.reduce((pn, u) => [ ...pn, ...u.phoneNumbers ], []); 

    Single

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // C#
    var user = users.Single();
      
    // TypeScript
    if (users.length > 1) { 
    throw new Error('The input sequence contains more than one element');
    }else if (!users.length) { 
    throw new Error('The input sequence is empty');
    }
    const user = users[0];

    SingleOrDefault

    1
    2
    3
    4
    5
    // C#
    var user = users.Single();
      
    // TypeScript
    const user = users[0]; 

    Skip

    1
    2
    3
    4
    5
    // C#
    var otherUsers = users.Skip(n);
      
    // TypeScript
    const otherUsers = users.filter((u, i) => i >= n); 

    SkipWhile

    1
    2
    3
    4
    5
    6
    7
    // C#
    var otherUsers = users.SkipWhile(predicate);
      
    // TypeScript
    let i = 0;
    while (i < users.length && predicate(users[i++]));
       const otherUsers = users.slice(i - 1); 

    Sum

    1
    2
    3
    4
    5
    6
    7
    8
    // C#
    var totalYears = users.Sum(u => u.Age);
      
    // TypeScript
    if (users.length < 1) { 
    throw new Error('source contains no elements');
    }
    const totalYears = users.reduce((ty, u) => ty + u, 0);

    Take

    1
    2
    3
    4
    5
    // C#
    var otherUsers = users.Take(n);
      
    // TypeScript
    const otherUsers = users.filter((u, i) => i < n);

    TakeWhile

    1
    2
    3
    4
    5
    6
    7
    // C#
    var otherUsers = users.TakeWhile(predicate);
      
    // TypeScript
    let i = 0;
    while (i < users.length && predicate(users[i++]));
      const otherUsers = users.slice(0, i - 1); 

    Union

    1
    2
    3
    4
    5
    6
    // C#
    var allUsers = someUser.Union(otherUsers);
      
    // TypeScript
    const allUsers = otherUsers.reduce((au, u) => 
     au.includes(u)  ? au    : [ ...au, u ]}), someUsers));// Use a polyfill for IE support

    Where

    1
    2
    3
    4
    5
    // C#
    var adults = users.Where(u => u.Age >= 18);
      
    // TypeScript
    const adults = users.filter(u => u.age >= 18); 

    Zip

    1
    2
    3
    4
    5
    6
    7
    8
    // C#
    var matches = buyers.Zip(sellers, (b, s) => new { Buyer = b, Seller = s });
      
    // TypeScript
    const matches = []
    ;for (let i = 0; i < buyers.length && i < sellers.length; i++) { 
     matches.push({    buyer: buyers[i],    seller: sellers[i],  });
    }

    水平有限,请大家见谅,翻译的有误,请指出。谢谢

    原文地址 https://decembersoft.com/posts/typescript-vs-csharp-linq/

  • 相关阅读:
    关于素数的具体问题
    Scala Apply
    Scala内部类
    Scala 类和对象
    Scala Tuple类型
    Scala数组
    sql server 游标
    表变量和临时表详解
    子查询详解
    EXEC 和 SP_EXECUTESQL的区别
  • 原文地址:https://www.cnblogs.com/sexintercourse/p/11832242.html
Copyright © 2011-2022 走看看