我知道,Collections当你通过引用传递它们时,Java是可变的.
我想知道究竟在原始列表和子列表的内存地址中发生了什么.
子列表和原始列表是否指向同一个对象?
以下是反映子列表中对主要原始列表所做更改的代码示例.
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add(1, "3");
List<String> list2 = new LinkedList<String>(list);
list.addAll(list2);
list2 = list.subList(2, 5);
list2.clear(); //Changes are made to list
System.out.println(list);
Run Code Online (Sandbox Code Playgroud) 如果我们有一个列表,每个项目可以有不同的长度.例如:
l <- list(c(1, 2), c(3, 4,5), c(5), c(6,7))
Run Code Online (Sandbox Code Playgroud)
(为了清楚起见,我们将在列表"items"中调用对象,并在列表"elements"的对象中调用对象.)
我们如何提取,例如每个项目的第一个元素?在这里,我想提取:
1, 3, 5, 6
Run Code Online (Sandbox Code Playgroud)
然后每个项目的第二个元素的相同问题:
2, 4, NA, 7
Run Code Online (Sandbox Code Playgroud) 我需要一个带有子项编号的嵌套列表,如下所示:
1. Item 1
1.1 - Subitem 1
1.2 - Subitem 2
1.3 - Subitem 3
1.4 - Subitem 4
1.5 - Subitem 5
2. Item 2
2.1 - Subitem 1
2.2 - Subitem 2
2.3 - Subitem 3
2.4 - Subitem 4
2.5 - Subitem 5
Run Code Online (Sandbox Code Playgroud)
好吧,我知道用纯HTML无法实现这一点.使用这样的东西并自动编号子列表会很棒:
<ol>
<li>
Item 1
<ol>
<li>Subitem 1</li>
<li>Subitem 2</li>
<li>Subitem 3</li>
<li>Subitem 4</li>
<li>Subitem 5</li>
</ol>
</li>
<li>
Item 2
<ol>
<li>Subitem 1</li>
<li>Subitem 2</li>
<li>Subitem 3</li>
<li>Subitem 4</li>
<li>Subitem 5</li>
</ol> …Run Code Online (Sandbox Code Playgroud) 我想要一个List<Container>地方Container.Active == true,只给我containerObject.Items > 2.如何以这种方式过滤子列表?
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication1
{
internal class Container
{
public List<int> Items { get; set; }
public bool Active { get; set; }
public Container(bool active, params int[] items)
{
Items = items.ToList();
Active = active;
}
}
class Program
{
static void Main(string[] args)
{
var containers = new List<Container> {new Container(true,1, 2, 3), new Container(false, 1,2,3,4,5,6), new Container(true,1,2,5,6,7,8,9,10)};
var result = containers.Where(c => …Run Code Online (Sandbox Code Playgroud) 非常简单
有了这个,(sort L #'> :key #'second))我可以排序,(((C) 1) ((D) 1) ((E) 1) ((F) 1) ((G) 1) ((H) 1) ((B) 3) ((A) 8))
但现在我要排序,((((A) 8)) (((B) 3)) (((C) 1)) (((D) 1)) (((E) 1)) (((F) 1)) (((G) 1)) (((H) 1))).
我需要做些什么(sort L #'> :key #'second))才能让第二个列表排序?
我有一个包含许多子列表的列表.例如:
full_list = [[1, 1, 3, 4], [3, 99, 5, 2],[2, 4, 4], [3, 4, 5, 2, 60]]
Run Code Online (Sandbox Code Playgroud)
我还有另一个列表,名为省略.例如:
omit = [99, 60, 98]
Run Code Online (Sandbox Code Playgroud)
如果该子列表中的任何元素在省略列表中,我想删除full_list 中的子列表.例如,我希望结果列表是:
reduced_list = [[1, 1, 3, 4], [2, 4, 4]]
Run Code Online (Sandbox Code Playgroud)
因为只有这些子列表没有省略列表中的元素.
我猜是有一些简单的方法可以通过列表理解来解决这个问题,但我无法让它工作.我尝试了很多东西:例如:
reduced_list = [sublist for sublist in full_list if item for sublist not in omit]
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激!
ps,以上是一个简化的问题.我的最终目标是从非常长的列表(例如,500,000个子列表)中删除子列表,如果这些子列表中的任何元素(字符串)在"省略"列表中包含超过2000个字符串.
如果我将数据存储在列表中,例如
images = ['pdf-one','gif-two','jpg-three']
Run Code Online (Sandbox Code Playgroud)
如何在连字符处将这些元素拆分为多个元素 - 而不是子列表.即
images = ['pdf','-one','gif','-two','jpg','-three']
Run Code Online (Sandbox Code Playgroud)
不
images = [['pdf','-one'],['gif','-two'],['jpg','-three']]
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个included_list(X,Y)术语来检查 X 是否是 Y 的非空子列表。
我已经用它来检查元素是否存在于 Y 列表中
check_x(X,[X|Tail]).
check_x(X,[Head|Tail]):- check_x(X,Tail).
Run Code Online (Sandbox Code Playgroud)
和附加条款
append([], L, L).
append([X | L1], L2, [X | L3]) :- append(L1, L2, L3).
Run Code Online (Sandbox Code Playgroud)
创建一个列表,以便程序完成
included_list([HeadX|TailX],[HeadX|TailX]).
Run Code Online (Sandbox Code Playgroud)
但是我在处理我试图通过“追加”创建的新空列表时遇到问题(我想创建一个空列表来添加确认存在于两个列表中的元素。)
我找到了这个
sublist1( [], _ ).
sublist1( [X|XS], [X|XSS] ) :- sublist1( XS, XSS ).
sublist1( [X|XS], [_|XSS] ) :- sublist1( [X|XS], XSS ).
Run Code Online (Sandbox Code Playgroud)
但它在 sublist([],[1,2,3,4)
简单地说我的问题是:检索具有给定大小的ArrayList的随机不连续子列表的最有效方法是什么.
以下是我自己的设计,虽然有效,但对我来说似乎有点笨拙.这是我的第一个JAVA程序,所以请原谅我的代码或问题是否符合最佳实践;)
备注:
- 我的列表不包含重复项
- 我猜想如果AimSize超过原始列表大小的一半,删除项目而不是添加项目可能会更快
public ArrayList<Vokabel> subList(int AimSize) {
ArrayList<Vokabel> tempL = new ArrayList<Vokabel>();
Random r = new Random();
LinkedHashSet<Vokabel> tempS = new LinkedHashSet<Vokabel>();
tempL = originalList;
// If the size is to big just leave the list and change size
// (in the real code there is no pass-by-value problem ;)
if (!(tempL.size() > AimSize)) {
AimSize = tempL.size();
// set to avoid duplicates and get a random order
} else if (2* AimSize …Run Code Online (Sandbox Code Playgroud) 我现在对F#感兴趣,因为它与我以前用过的所有东西都不一样.我需要访问大型列表中包含的每个列表的第一个元素.如果我假设主列表包含"x"列表本身包含5个元素,那么访问每个第一个元素的最简单方法是什么.
let listOfLists = [[1; 2; 3; 4; 5]; [6; 7; 8; 9; 10]; [11; 12; 13; 14; 15]]
我想要的输出将是一个包含[1; 6; 11]的新列表
目前我有
let rec firstElements list =
match list with
| list[head::tail] ->
match head with
| [head::tail] -> 1st @ head then firstElements tail
Run Code Online (Sandbox Code Playgroud)
然后扩展它,我将如何获得所有第二个元素?是否最好在没有第一个元素的情况下创建新列表(通过使用类似函数删除它们)然后重用相同的函数?