我有10个数组列表和一个String变量。 我有一个函数/方法,允许用户选择要添加的阵列列表之一。目前,该函数将“selected”字符串的值更改为正确的数组列表名称的值。
启动另一个功能,即向arraylist添加元素。但是,我正在努力想出一个解决方案,根据用户选择的内容来改变添加哪个arraylist。
此代码不起作用,但说它是:
function get_topic_per_category($num,$start,$cat)
{
$offset = $this->uri->segment(4);
$this->db->select('ft.*,', FALSE);
$this->db->select('IFNULL(COUNT(fc.topic_sk),0) as count', FALSE);
$this->db->from('forum_topic as ft');
$this->db->join("forum_comment as fc", ' fc.topic_sk = ft.topic_sk','left');
$this->db->group_by('ft.topic_sk');
$this->db->order_by('pinned',"DESC");
$this->db->order_by("date_posted","DESC");
$this->db->limit($num,$offset);
$query= $this->db->get();
return $query->result();
}
通常你可以输入arrayList名称并添加.add(whateverTheUserIsEntering)并且它可以正常工作。
那么我如何才能使arrayList的名称等于String变量的值呢?
答案 0 :(得分:1)
以下是使用Map
将字符串名称绑定到列表的示例。当你需要在运行时将事物放在一起时(与编译时相反,正如你用示例choosen.add(userEntered)
所示),你通常需要使用Map。
这适用于从文件读取的字符串(比如将XML名称绑定到对象)或解释器之类的东西,您必须按名称跟踪用户变量。
public class SymbolTableExample
{
public static void main(String[] args) {
// Some array lists
ArrayList<String> cats = new ArrayList<>();
ArrayList<String> dogs = new ArrayList<>();
ArrayList<String> beetles = new ArrayList<>();
ArrayList<String> cows = new ArrayList<>();
// Bind names to them
Map<String,List<String>> binding = new HashMap<>();
binding.put( "cats", cats );
binding.put( "dogs", dogs );
binding.put( "beetles", beetles );
binding.put( "cows", cows );
// Pretend the user enters some input here
String userChoice = "cats";
String userEntered = "flufy";
binding.get( userChoice ).add( userEntered );
}
}
答案 1 :(得分:0)
使用Map
。
public interface Map<K,V>
您可以使用方法
V put(K key, V value)
为键指定值,因此您可以为不同的键设置ArrayList
或添加新键。
由于您使用的是ArrayList
,因此您可以按照以下方式制作地图:
Map<String, ArrayList<String>)> myArrays
然后,要使用给定键向数组添加值,请使用
myArrays.get(userChosenArrayKey).add(whatUserEntered)