C# SelectMany 的使用

通过传递引用类型的参数,可以更改引用本身的值,而不是其单个元素或字段的值。
有时,向方法指定精确数量的自变量这一要求是受限的。 通过使用 params 关键字来指示一个参数是一个参数
数组,可通过可变数量的自变量来调用方法。 使用 params 关键字标记的参数必须为数组类型,并且必须是该方
法的参数列表中的最后一个参数。
然后,调用方可通过以下四种方式中的任一种来调用方法:
传递相应类型的数组,该类型包含所需数量的元素。
向该方法传递相应类型的单独自变量的逗号分隔列表。
传递 null 。
不向参数数组提供参数。
以下示例定义了一个名为 GetVowels 的方法,该方法返回参数数组中的所有元音。 Main 方法演示了调用方法
的全部四种方式。 调用方不需要为包含 params 修饰符的形参提供任何实参。 在这种情况下,参数是一个空数
组。

using System;
using System.Linq;
class ParamsExample
{
static void Main()
{
string fromArray = GetVowels(new[] { "apple", "banana", "pear" });
Console.WriteLine($"Vowels from array: '{fromArray}'");
string fromMultipleArguments = GetVowels("apple", "banana", "pear");
Console.WriteLine($"Vowels from multiple arguments: '{fromMultipleArguments}'");
string fromNull = GetVowels(null);
Console.WriteLine($"Vowels from null: '{fromNull}'");
string fromNoValue = GetVowels();
Console.WriteLine($"Vowels from no value: '{fromNoValue}'");
}
static string GetVowels(params string[] input)
{
if (input == null || input.Length == 0)
{
return string.Empty;
}
var vowels = new char[] { 'A', 'E', 'I', 'O', 'U' };
return string.Concat(
input.SelectMany(
word => word.Where(letter => vowels.Contains(char.ToUpper(letter)))));
}
}
// The example displays the following output:
// Vowels from array: 'aeaaaea'
// Vowels from multiple arguments: 'aeaaaea'
// Vowels from null: ''
// Vowels from no value: ''

拓展方法使用:

  /// <summary>
  /// 获取输入单词,包含元音字符
  /// </summary>
  /// <param name="words"></param>
  /// <returns></returns>
  public string[] WhereVowel(params string[] words)
  {
      if (words == null || !words.Any())
      {
          return default;
      }
      var vowelChars = new char[] { 'a', 'e', 'i', 'o', 'u' };
      return words.Where(w => w.ToArray().Intersect(vowelChars).Any()).ToArray();
  }


  /// <summary>
  /// 获取输入字符中的元音字符
  /// </summary>
  /// <param name="words"></param>
  /// <returns></returns>
  public string SelectVowel(params string[] words)
  {
      if (words == null || !words.Any())
      {
          return default;
      }
      var vowelChars = new char[] { 'a', 'e', 'i', 'o', 'u' };
      var vowelCharsArr = words.SelectMany(w =>
      {
          var destVowels = w.ToArray().Where(c => vowelChars.Contains(char.ToUpper(c))).ToList();
          if (destVowels!=null && destVowels.Any())
          {
              destVowels.Add('|');
              return destVowels;
          }
          else
          {
              return Array.Empty<char>().ToList();
          }
      });
      return string.Join(',', vowelCharsArr);
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值