我有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)]
请提出任何想法
答案 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。
我猜你是在研究基于规则的喇叭 - 条款,这就是为什么你要使用那种格式?