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

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

與標記化地圖鍵的字符串匹配

與標記化地圖鍵的字符串匹配

HUH函數(shù) 2022-07-14 17:04:17
我的 Dynamo DB 中有一張地圖,存儲如下:"A|1,2,3,4|B" : "[some data]""C|5,6|D" : "[some data]""X|7,8,9,10,11,12,13|Y" : "[some data]" ..為了便于討論,假設(shè)上圖中的每個鍵都是 LEFT、MIDDLE 和 RIGHT 三個字符串的串聯(lián)結(jié)果,如:“LEFT|MIDDLE|RIGHT”。我想知道給定的字符串是否是上圖中的鍵。但是,中間字符串應(yīng)該按此匹配的逗號值拆分。示例:“A|1|B”和“A|3|B”都應(yīng)該與第一個條目匹配。類似地,“C|5|D”匹配第二個條目,依此類推。假設(shè): MIDDLE 字符串可以是 1 到 200 個數(shù)字的串聯(lián)(存儲為字符串)。該地圖有大約 35K 條目。我想一種直接的方法是“擴展”原始映射并分解中間字符串上的每個條目以創(chuàng)建多個具有重復(fù)值的新鍵值對。但是,我的數(shù)據(jù)量很大,因此這種方法會花費大量時間和空間復(fù)雜性。有沒有一種優(yōu)雅的方法可以在生產(chǎn)環(huán)境中解決這個問題?
查看完整描述

2 回答

?
暮色呼如

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

例如,我會用一些隨機字符串替換 MIDDLE


"A|4806369425|B" : "[some data M]"

"A|0848833569|B" : "[some data N]"

"A|5514390566|B" : "[some data P]"

添加另一個映射


"1" : "4806369425"

"2" : "4806369425"

"3" : "4806369425"

"4" : "4806369425"

"5" : "0848833569"

"6" : "0848833569"

"7" : "5514390566"

"8" : "5514390566"

"9" : "5514390566"

...

"13" : "5514390566"

當獲取一個值時,我會去第二個映射找到中間的鍵。它應(yīng)該在 O(1) 中執(zhí)行,然后將左右連接并在 O(1) 中再次從第一個映射中獲取一些數(shù)據(jù)


查看完整回答
反對 回復(fù) 2022-07-14
?
犯罪嫌疑人X

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

您可以嘗試類似的方法(未經(jīng)測試的代碼):


String testString = "A|1,2,3,4|B"


String primarySeparator = "|";

String secondarySeparator = ",";


public boolean contains(String key) {

  String[] parts = testString.split(primarySeparator);

  List<String> values = Arrays.asList(parts[1].split(secondarySeparator)); // Point 1


  String[] keyParts = key.split(primarySeparator);


  if (keyParts[0].equals(parts[0])

    && keyParts[2].equals(parts[2]

    && values.contains(keyParts[1])) { // Point 2

    return true;

  } else {

    return false;

  }

}

標記為“Point 1”的行使用“|”分割字符串 分隔符,選擇第二個值,這是您的數(shù)字列表,使用“,”分隔符將其拆分并將其轉(zhuǎn)換為列表。因此,您會得到一個列表,其中包含您在“中間”中的所有值。


然后,在“第 2 點”,我們測試匹配。


請記住,此代碼未經(jīng)測試,不關(guān)心意外情況,例如如果您的字符串沒有正確數(shù)量的由“|”分隔的部分 或者如果您的值列表不包含任何值。您可能需要調(diào)整以將這些情況考慮在內(nèi)。


如果你想測試大量的行,你當然應(yīng)該只拆分一次密鑰。


查看完整回答
反對 回復(fù) 2022-07-14
  • 2 回答
  • 0 關(guān)注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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