如何产生嵌套的IENumberable?

时间:2016-09-12 12:12:31

标签: c# methods yield

我知道如何在返回值为IENumberable

的方法中产生值
public IEnumerable<int> GetDigits()
{
    yield return 1;
    yield return 1;
    yield return 1;
}

但是嵌套IEnumerable<IEnumerable<int>>的正确语法是什么?

public IEnumerable<IEnumerable<int>> GetNestedDigits()
{
    yield return yield return 1; //??
}

3 个答案:

答案 0 :(得分:4)

您无法直接嵌套yield return语句。你必须创建另一种方法:

public IEnumerable<IEnumerable<int>> GetNestedDigits()
{
    yield return GetNestedEnumerable();
}

public IEnumerable<int> GetNestedEnumerable()
{
    yield return 1;
}

答案 1 :(得分:0)

像这样的东西

val rdd = sparkContext.parallelize(1 to 10, 3)
    val pairRDD = rdd.map { x => (x, x) }

    val rdd1 = sparkContext.parallelize(11 to 20, 3)
    val pairRDD1 = rdd1.map { x => (x, x) }

    pairRDD.union(pairRDD1).foreach(tuple => {
      println(tuple._1)
      println(tuple._2)
    })

答案 2 :(得分:0)

如果我从字面上理解你的所有文字,你可以使用:

IEnumerable<IEnumerable<int>> GetNestedDigits()//{1, 2, 3}, {1, 2, 3}, {1, 2, 3}
{
  yield return new int[] { 1, 2, 3 };
  yield return new int[] { 1, 2, 3 };
}

你必须声明某种实现IEnumerable的集合并返回它。你不能直接嵌套产量。也许更接近的方式是声明你随后返回的私有IEnumerables。

IEnumerable<int> GetNestedDigitsA()
{
  yield return 1;
  yield return 2;
  yield return 3;
}

IEnumerable<int> GetNestedDigitsB()
{
  yield return 1;
  yield return 2;
  yield return 3;
}

IEnumerable<IEnumerable<int>> GetNestedDigits()//{1, 2, 3}, {1, 2, 3}
{
  yield return GetNestedDigitsA();
  yield return GetNestedDigitsB();
}