我正在使用XML来存储短语数据库,其中一次将向用户显示其中5个短语。我需要确保这5个短语是独一无二的,当然,只是获取随机数据无法确保。我想我可以做到这一点,如果我可以将我正在使用的字符串数组转换为List,但我找不到如何做到这一点的好信息。有人对此有任何意见吗?
public String getResults(){
// Get a random string from our results XML and return the string.
Resources r = getResources();
String[] resultsList = r.getStringArray(R.array.bossResults);
List<String> resultsArrayList = new ArrayList<String>(Arrays.asList(resultsList));
//ArrayList resultsArrayList = ;
String q = resultsList[rgenerator.nextInt(resultsList.length)];
return q;
//resultsList.remove(q);
}
private OnClickListener mAddListener = new OnClickListener()
{
public void onClick(View v)
{
//Declare our TextViews for population from the random results from XML
TextView t1 = new TextView(getApplicationContext());
t1=(TextView)findViewById(R.id.textView1);
TextView t2 = new TextView(getApplicationContext());
t2=(TextView)findViewById(R.id.textView2);
TextView t3 = new TextView(getApplicationContext());
t3=(TextView)findViewById(R.id.textView3);
TextView t4 = new TextView(getApplicationContext());
t4=(TextView)findViewById(R.id.textView4);
TextView t5 = new TextView(getApplicationContext());
t5=(TextView)findViewById(R.id.textView5);
// Get a random result for each textview
String result1 = getResults();
String result2 = getResults();
String result3 = getResults();
String result4 = getResults();
String result5 = getResults();
}
}
答案 0 :(得分:0)
最简单的方法是记住您已经选择了哪些项目,如果再次选择其中一项,则只需丢弃它。如果可供选择的项目数量很少,这可能会非常慢。如果是这种情况,您可以shuffle整个数组并返回前n个项目。
答案 1 :(得分:0)
我会对getResults()进行更改,以便在一次传递中为您完成所有工作。通过这种方式,它可以记住已经选择了哪些值,并缩小了将来从中选择的值......就像这样:
public List<String> getResults(int count) {
List<String> results = new ArrayList<String>();
Resources r = getResources();
String[] resultsList = r.getStringArray(R.array.bossResults);
List<String> resultsArrayList = new ArrayList<String>(Arrays.asList(resultsList));
for(int i = 0; i < count; ++i) {
int next = rgenerator.nextInt(resultsArrayList.size());
String nextVal = resultsArrayList.remove(next);
results.add(nextVal);
}
return results;
}
答案 2 :(得分:0)
最简单的方法可能是重写getResults()
以返回所需的所有字符串(并且不再加载“bossResults”数组5次)。
public List<String> getResults(int count){
// Get a random string from our results XML and return the string.
List<String> ret = new ArrayList<String>();
Resources r = getResources();
List<Integer> picked = new List<Integer>();
String[] resultsList = r.getStringArray(R.array.bossResults);
while (ret.size() < count) {
int i = rgenerator.nextInt(resultsList.length);
if (picked.contains(i)) { continue; }
picked.add(i);
ret.add(resultsList[i]);
}
return ret;
}
count
的大值可能会很慢。
编辑:如果count
大于数组的大小,则会陷入无限循环!