相关疑难解决方法(0)

"yield"关键字有什么作用?

yieldPython中关键字的用途是什么?它有什么作用?

例如,我试图理解这段代码1:

def _get_child_candidates(self, distance, min_dist, max_dist):
    if self._leftchild and distance - max_dist < self._median:
        yield self._leftchild
    if self._rightchild and distance + max_dist >= self._median:
        yield self._rightchild  
Run Code Online (Sandbox Code Playgroud)

这是来电者:

result, candidates = [], [self]
while candidates:
    node = candidates.pop()
    distance = node._get_dist(obj)
    if distance <= max_dist and distance >= min_dist:
        result.extend(node._values)
    candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
return result
Run Code Online (Sandbox Code Playgroud)

_get_child_candidates调用该方法时会发生什么?列表是否返回?单个元素?它又被召唤了吗?后续通话何时停止?


1.代码来自Jochen Schulz(jrschulz),他为度量空间创建了一个很棒的Python库.这是完整源代码的链接:模块mspace.

python iterator yield generator coroutine

9664
推荐指数
46
解决办法
212万
查看次数

正确使用'收益率'

产量关键字是其中的一个关键字,在C#是继续迷惑我,而且我正确使用它,我从来没有自信.

以下两段代码中,哪个是首选,为什么?

版本1:使用收益率返回

public static IEnumerable<Product> GetAllProducts()
{
    using (AdventureWorksEntities db = new AdventureWorksEntities())
    {
        var products = from product in db.Product
                       select product;

        foreach (Product product in products)
        {
            yield return product;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

版本2:返回列表

public static IEnumerable<Product> GetAllProducts()
{
    using (AdventureWorksEntities db = new AdventureWorksEntities())
    {
        var products = from product in db.Product
                       select product;

        return products.ToList<Product>();
    }
}
Run Code Online (Sandbox Code Playgroud)

c# yield-return

873
推荐指数
13
解决办法
24万
查看次数

Java中是否有goto语句?

我对此感到困惑.我们大多数人都被告知Java中没有任何goto语句.

但我发现它是Java中的关键词之一.哪里可以使用?如果它不能使用,那么为什么它作为关键字包含在Java中呢?

java syntax goto keyword

252
推荐指数
13
解决办法
38万
查看次数

为什么使用yield关键字,当我可以使用普通的IEnumerable时?

鉴于此代码:

IEnumerable<object> FilteredList()
{
    foreach( object item in FullList )
    {
        if( IsItemInPartialList( item ) )
            yield return item;
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么我不应该这样编码呢?:

IEnumerable<object> FilteredList()
{
    var list = new List<object>(); 
    foreach( object item in FullList )
    {
        if( IsItemInPartialList( item ) )
            list.Add(item);
    }
    return list;
}
Run Code Online (Sandbox Code Playgroud)

我理解yield关键字的作用.它告诉编译器构建某种东西(迭代器).但为什么要用呢?除了代码略少之外,它对我有什么影响?

c# yield

171
推荐指数
6
解决办法
9931
查看次数

何时不使用收益率(返回)

这个问题在这里已经有了答案:
在返回IEnumerable时是否有理由不使用'yield return'?

关于这些的好处,这里有几个有用的问题yield return.例如,

我正在寻找关于何时使用的想法yield return.例如,如果我预计需要返回一个集合中的所有项目,它没有看起来就像yield是有用的,对不对?

什么情况下使用yield会限制,不必要,让我陷入困境,或者应该避免?

.net c# yield yield-return

158
推荐指数
8
解决办法
4万
查看次数

创建两个日期之间的所有日期的数组或列表

我正在生成带有沿X轴的日期的多系列图.

问题是并非图中的所有系列在日期范围内都具有相同的日期.这意味着,如果我选择2月1日到4月30日,那么一个系列可能有数据从2月1日开始,但只持续到3月底,但另一个系列可能有整个日期范围的数据.

这会扭曲我需要创建的图表.去,给定在查询开始时采用的日期范围,我想生成一个日期列表并填充要绘制的数据,用那些没有数据的日期填充0的系列.

c# asp.net list

133
推荐指数
4
解决办法
11万
查看次数

奇数返回语法语句

我知道这可能听起来很奇怪,但我甚至不知道如何在互联网上搜索这种语法,我也不确定究竟是什么意思.

所以我看了一些MoreLINQ代码然后我注意到了这个方法

public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source,
        Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer)
{
    if (source == null) throw new ArgumentNullException(nameof(source));
    if (keySelector == null) throw new ArgumentNullException(nameof(keySelector));

    return _(); IEnumerable<TSource> _()
    {
        var knownKeys = new HashSet<TKey>(comparer);
        foreach (var element in source)
        {
            if (knownKeys.Add(keySelector(element)))
                yield return element;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这个奇怪的回报声明是什么?return _();

.net c# c#-7.0

102
推荐指数
2
解决办法
4546
查看次数

一些有助于理解"产量"

在我不断追求吸吮的过程中,我试图理解"收益"陈述,但我一直遇到同样的错误.

[someMethod]的主体不能是迭代器块,因为'System.Collections.Generic.List <AClass>'不是迭代器接口类型.

这是我遇到的代码:

foreach (XElement header in headersXml.Root.Elements()){
    yield return (ParseHeader(header));                
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我不能在迭代器中使用yield吗?那有什么意义呢?在这个例子中,它说它List<ProductMixHeader>不是迭代器接口类型. ProductMixHeader是一个自定义类,但我想List是一个迭代器接口类型,不是吗?

- 编辑 -
感谢所有快速解答.
我知道这个问题不是全新的,同样的资源不断涌现.
事实证明我认为我可以List<AClass>作为返回类型返回,但由于List<T>不是懒惰,它不能.更改我的返回类型以IEnumerable<T>解决问题:D

一个有点相关的问题(不值得打开一个新线程):IEnumerable<T>如果我确定99%的情况我将要去.ToList(),它是否值得作为返回类型给出?性能影响是什么?

c# iterator yield

36
推荐指数
3
解决办法
9361
查看次数

有人可以揭开yield关键字的神秘面纱吗?

我已经看到在Stack Overflow和博客上使用了yield关键字.我不使用LINQ.有人可以解释yield关键字吗?

我知道存在类似的问题.但是没有一个能用简单的语言解释它的用途.

c# language-features yield

28
推荐指数
5
解决办法
4184
查看次数

从 Java 16 开始,何时以及如何在 flatMap 上执行从 Stream mapMulti 到 0..n 的映射

我一直在浏览 Java 16 的新闻和源代码,并且遇到了名为mapMulti. 早期访问的JavaDoc说它类似于flatMap并且已经被批准用于完全相同的 Java 版本。

<R> Stream<R> mapMulti?(BiConsumer<? super T,?? super Consumer<R>> mapper)
Run Code Online (Sandbox Code Playgroud)
  • 如何使用此方法执行一对 0..n 映射?
  • 新方法如何工作以及它与flatMap. 什么时候最好?
  • mapper可以调用多少次?

java java-stream flatmap java-16 mapmulti

22
推荐指数
2
解决办法
1147
查看次数