第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用它的一次出現(xiàn)替換序列中特定數(shù)字的連續(xù)出現(xiàn)

用它的一次出現(xiàn)替換序列中特定數(shù)字的連續(xù)出現(xiàn)

C#
哆啦的時光機 2021-11-14 10:16:21
我無法解決這個特定問題。鑒于序列:1  1  2  2  3  3  4  1  1  5  6  7  1  1我希望連續(xù)出現(xiàn)的 1 被一次出現(xiàn)的 1 替換。1  2  2  3  3  4  1  5  6  7  1我嘗試使用DistinctUntilChanged但這沒有用。List<int> intList = new List<int>() { 1, 1, 2, 2, 3, 3, 4, 1, 1, 5, 6, 7, 1, 1 };            IObservable<int> intObsrvr = intList.ToObservable();            intObsrvr                .DistinctUntilChanged(x => x == 1)                .SubscribeConsole();我得到的輸出是:1,2,1,5,1我也很好奇這個 keySelector 是如何工作的,因為我無法解釋我在這里得到的輸出序列。
查看完整描述

3 回答

?
一只名叫tom的貓

TA貢獻1906條經(jīng)驗 獲得超3個贊

嘗試這個:


var intList = new List<int>() { 1, 1, 2, 2, 3, 3, 4, 1, 1, 5, 6, 7, 1, 1 };

var intObsrvr = intList.ToObservable();


var query =

    intObsrvr

        .Scan(

            new { skip = false, value = int.MinValue },

            (a, x) =>  new { skip = (a.value == 1) && (x == 1) , value = x })

        .Where(x => !x.skip)

        .Select(x => x.value);

我覺得.Scan被嚴重低估了。


您還可以使用.Publish/ Zip/ SelectMany:


var query =

    intObsrvr.Publish(

        xs => xs

            .StartWith(int.MinValue)

            .Zip(xs, (z, x) => z == 1 & x == 1 ? new int[] { } : new [] { x })

            .SelectMany(x => x));

隨你挑。


var query =

    intObsrvr.Publish(

        xs => xs

            .StartWith(int.MinValue)

            .Zip(xs, (z, x) => z == 1 & x == 1

                ? Observable.Empty<int>()

                : Observable.Return(x))

            .SelectMany(x => x));

甚至更多的選擇。



查看完整回答
反對 回復 2021-11-14
?
LEATH

TA貢獻1936條經(jīng)驗 獲得超7個贊

另一個Zip沒有的變體SelectMany:


var observable = new List<int> { 1, 1, 2, 2, 3, 3, 4, 1, 1, 5, 6, 7, 1, 1 }

    .ToObservable();


observable.StartWith(int.MinValue).Zip(observable, (previous, current) => (previous, current))

    .Where(t => t.current != 1 || t.current != t.previous)

    .Select(t => t.current);


查看完整回答
反對 回復 2021-11-14
?
躍然一笑

TA貢獻1826條經(jīng)驗 獲得超6個贊

如果內(nèi)置方法不符合您的要求,您始終可以創(chuàng)建自己的方法。


DistinctUntilChanged滿足您需求的A相當簡單:


public static IEnumerable<T> DistinctUntilChanged<T>(

    this IEnumerable<T> source) 

{

    using (var e = source.GetEnumerator())

    {

        if (!e.MoveNext())

            yield break;


        yield return e.Current;

        var previous = e.Current;


        while (e.MoveNext())

        {

            if (!e.Current.Equals(previous))

            {

                yield return e.Current;

                previous = e.Current;

            }

        }

    }

}


查看完整回答
反對 回復 2021-11-14
  • 3 回答
  • 0 關注
  • 175 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號