如何在android中搜索和替换2d数组

时间:2016-05-09 10:40:36

标签: android search multidimensional-array replace expert-system

我有4列的sqlite数据库。即身份,统治机构,利弊和布尔。我可以向它插入数据并使用游标检索并存储在2d数组中。示例行可以像

id     rule body                 cons              bool
1      jogging(?X)               athelete(?x)      0
2      athelete(?X)              runsfast(?x)      0
3      athelete(?X),runsfast(?x) champion(?x)      0

同样是没有列标题的数组的结构。现在我想做的是用户必须以下列格式提供输入

jogging(alan)

它必须替换2darray中的?x并在?x位置输入alan。

1      jogging(alan)                  athelete(alan)      0
2      athelete(alan)                 runsfast(alan)      0
3      athelete(alan),runsfast(alan)  champion(alan)      0

如果发现慢跑(alan),则将慢跑(alan)的缺点复制到newarray []。

newarray[athelete(alan)]

newarray []现在携带运动员(阿兰)。现在newarray []已经更新,所以再次搜索运动员(阿兰)如果发现将runsfast(alan)保存到newarray []中。再次更新,我们在newarray []中有athelete(alan),runsfast(alan)。

newarray[athelete(alan),runfast(alan)]

现在搜索athelete(alan),runsfast(alan)并添加冠军(alan)到newarray []再次重复,这次没有匹配发现所以退出。

newarray[athelete(alan),runfast(alan),runfast(alan)]

请提出任何想法

4 个答案:

答案 0 :(得分:0)

使用HashMap存储具有唯一键的单行元素,并将地图存储在arraylist中。您可以在循环中检索每个地图并获取密钥的值。

答案 1 :(得分:0)

我认为比在数组中保留sqlite数据的引用更好的方法是使用游标加载器并在位置处使用游标,然后rater使用2d数组。游标是暂时的,可以被关闭和丢弃。使用适配器中的交换光标更容易操作...等等。只是一个想法。

答案 2 :(得分:0)

我编辑complet的答案,因为你更新问题以设置一个正确的例子。

使用SQLite来做,我会使用这样的东西:(未经测试)

SELECT id, replace( rule body, '?X', alan ) AS 'rule_body', replace( cons, '?X', alan ) AS 'cons', bool 
     FROM table 
     WHERE rule_body LIKE athelete(alan) 
         OR cons LIKE athelete(alan);

这应返回与您想要的名称对应的正确行。您需要设置NAME而不是输入中的文本(提取名称)

如果你真的想使用你的数组,你需要循环数组并检查第二列和第四列(我猜这两个字段)。

String[][] array = new String[2][4]; //The result array
List<String> result = new ArrayList<String>();
String name = ""; //extract the name from the form input.
for(String[] tmp : array){
   if(isValid(tmp, name)){ //a method to check the field 1 and 2 of tmp with name
      result.add(tmp[2]) //the cons row
   }
}

您只需要创建 isValid(String []行,String name),以检查是否在正确的字段中找到了该名称。使用正则表达式检查您是否找到了&#39;(&#39; + name +&#39;)&#39; 将会解决问题。

答案 3 :(得分:0)

一种方法是在你的情况下使用一个字符拆分它(所以它将拆分 joggin(?X)进入慢跑和?x)你可以使用替换方法剥离它。同样用慢跑(阿兰)做它,所以它将是joggin和alan) 将它们添加到arraylist或任何您可以轻松使用的存储结构。在数组的情况下你可以搜索

rule[x] Matches fact[x] 
copy fact[x+1] into rule[x+1] 

所以如果发现在一个数组中慢跑等于其他数组中的慢跑,请将下一个项目复制到其他数组替换?x。

我猜你是在研究基于规则的喇叭 - 条款,这就是为什么你要使用那种格式?