我有三個元組列表,每個元組包含(startpos,endpos,value)。合併「空間」元組列表
我想要做的就是這些合併成元組的一個列表(startpos,endpos,值[]),但以下我覺得它更容易吸引比寫一個規則:
//third [---------] [------------]
//second [-------------] [---------------------------]
//first [-----------------------------] [--------------]
//(pos)|123456789|123456789|123456789|123456789|123456789|123456789
//result [--1-][--2-][---3---][---1----] [---2--][---3--]
(結果中的數字表示每個結果元素的值[]列表的預期長度)
基本上,我只保留一個「更高」的元素,它與「下」元素重疊,並且我分成了「同質「元素。
該職位可以被認爲是類型int
。正如你從結果中可以看到的那樣,'分割'部分不會在相同的位置開始和結束,而是在pos-1或pos + 1。只要它被定義,值的順序並不重要。
採樣數據(基於上面的例子):
let third = [(12,22,3.1);(43,56,3.2)]
let second = [(6,20,2.1);(35,63,2.2)]
let first = [(0,30,1.1);(35,50,1.2)]
let after = [
(0,5,[1.1]);
(6,11,[1.1;2.1]);
(12,20,[1.1;2.1;3.1]);
(21,30,[1.1]);
(35,42,[1.2;2.2]);
(43,50,[1.2;2.2;3.2])
]
現在,我發現它思考這個問題的功能性的方式很難,任何想到的是勢在必行。也許這就是在這種情況下必然的,但如果任何人有任何想法...
UPDATE其實,如果我們廣義的輸入情況下已經是類型(int*int*List<float>
),我們可以只把兩個輸入列表的情況下, ,然後摺疊。
PS:這不是家庭作業,或代碼高爾夫球,我剛剛對數據進行了一些消毒處理。
AARGH!我發誓我在自己解決之前不會回來,但我被一些可怕的'((x1,y1,z1),(x2,y2,z2))模式匹配卡住了(這不起作用),誘惑越來越好。哦,你生活和學習。就像是一個子問題,是我還是斷言只能在F5模式下工作,而不是Alt-Enter模式? – Benjol
嗯,實際上還沒有到那裏,但給了我一些工作(應該從頂部'下',所以第三(21,22)位得到zapped,因爲不在第二等存在)。而(31,34)是空的,但我可以很容易地解決這個問題。 – Benjol