簡體   English   中英

我如何找到元素的每個組合

[英]How do I find every combination of elements

我有一個元素列表:

John
Richard
Bill
Bob
Walter

我想做一些事情來將它們的所有可能組合放在兩列中,不包括重復項。 這是示例:

A            B
John         Richard
John         Bill
John         Bob
John         Walter
Richard      Bill
Richard      Bob
Richard      Walter
Bill         Bob
Bill         Walter
Bob          Walter

如您所見,我排除了 John-John 和 Walter-Bill,因為已經存在 Bill-Walter 組合。 我如何使用公式來做到這一點?

這是我的方法:

function myFunction() {
var names = ['John', 'Richard', 'Bill', 'Bob', 'Walter'];
var result = []
var sheet = SpreadsheetApp.getActive().getSheetByName("sheet1")                        
names.forEach( (element, index) => {
  names.slice(index+1,names.length).forEach ( (rest) => {                                      
  result.push([element,rest])        
})})
sheet.getRange(2,1,result.length,result[0].length).setValues(result);
}

輸出

解釋:

本質上,您遍歷名稱列表。 從每個元素開始,您只連接下一個元素。 例如, John是姓名列表中的第一個元素,您將JohnRichardBillBobWalter連接起來。 然后你 go 到下一個元素是Richard並且你將他與BillBobWalter連接起來。 通過這種方式,您可以避免重復: John - JohnJohn - RichardRichard - John forEach方法可幫助您實現這種迭代方法。

參考:

對於每個()

我如何使用公式來做到這一點?

采用:

=ARRAYFORMULA(SORT(UNIQUE(QUERY(IF(
 TRANSPOSE(SPLIT(REPT(CONCATENATE(A1:A&CHAR(9)), COUNTA(A1:A)),  CHAR(9)))>
 TRANSPOSE(SPLIT(CONCATENATE(REPT(A1:A&CHAR(9),  COUNTA(A1:A))), CHAR(9))), {
 TRANSPOSE(SPLIT(REPT(CONCATENATE(A1:A&CHAR(9)), COUNTA(A1:A)),  CHAR(9))), 
 TRANSPOSE(SPLIT(CONCATENATE(REPT(A1:A&CHAR(9),  COUNTA(A1:A))), CHAR(9)))}, {
 TRANSPOSE(SPLIT(CONCATENATE(REPT(A1:A&CHAR(9),  COUNTA(A1:A))), CHAR(9))), 
 TRANSPOSE(SPLIT(REPT(CONCATENATE(A1:A&CHAR(9)), COUNTA(A1:A)),  CHAR(9)))}), 
 "where Col1<>Col2", 0))))

在此處輸入圖像描述

如果 A1:A5 包含名稱,

=ARRAYFORMULA(SPLIT(QUERY(
  FLATTEN(
    IF(SEQUENCE(COUNTA(A1:A5))<TRANSPOSE(SEQUENCE(COUNTA(A1:A5))),
      A1:A5& "☤" & TRANSPOSE(A1:A5)
      ,)
   ),
  "where Col1 is not null",0),"☤"))
  • SEQUENCE(5)<TRANSPOSE(SEQUENCE(5)創建一個“真正的”上三角(對角線為 0)二維矩陣
0   1   1   1   1
0   0   1   1   1
0   0   0   1   1
0   0   0   0   1
0   0   0   0   0
  • 使用IF將二維矩陣轉換為 CONCATEnated 名稱:
            John☤Rich   John☤Bill   John☤Bob    John☤Walt
                        Rich☤Bill   Rich☤Bob    Rich☤Walt
                                    Bill☤Bob    Bill☤Walt
                                                Bob☤Walt
  • FLATTEN矩陣,使用QUERY刪除空格並SPLIT連接的名稱

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM